package middlewares

import (
	"ExchangeApp/utils"
	"github.com/gin-gonic/gin"
	"net/http"
)

// AuthMiddleware JWT认证中间件
// @Summary JWT认证中间件
// @Description 验证请求头中的JWT令牌，保护需要认证的API路由
// @Tags 中间件
// @Produce json
// @Failure 401 {object} map[string]string
// @Router /api/* [any]
func AuthMiddleware() gin.HandlerFunc {
	// 返回一个Gin中间件函数
	return func(ctx *gin.Context) {
		// 从请求头获取Authorization令牌
		token := ctx.GetHeader("Authorization")

		// 检查令牌是否存在
		if token == "" {
			// 令牌不存在，返回401未授权
			ctx.JSON(http.StatusUnauthorized, gin.H{
				"error": "Authorization header is required",
			})
			// 终止后续中间件和处理函数的执行
			ctx.Abort()
			return
		}

		// 解析JWT token获取用户名
		username, err := utils.ParseJWT(token)

		// 错误处理：token无效
		if err != nil {
			// 令牌无效，返回401未授权
			ctx.JSON(http.StatusUnauthorized, gin.H{
				"error": "Invalid token",
			})
			// 终止后续处理
			ctx.Abort()
			return
		}

		// token验证成功，将用户名存入上下文供后续处理函数使用
		ctx.Set("username", username)
		// 继续执行后续的中间件和处理函数
		ctx.Next()
	}
}
